#!/bin/bash

################################################################
# 
# 提醒服务的运行脚本
# Author: greedy_alpha@163.com
#
# 功能说明:
# 1. 同步最新的交易数据
# 2. 调用某个自定义规则产出计算结果
# 3. 使用指定的方式推送消息
# 4. 记录异常信息以排查问题
# 5. 定时清理数据以降低存储占用
#
################################################################


################################################################
# 脚本初始化
################################################################

# 判断是否在交易时间, 避免无效执行
tms=$(date +%H%M)
am_time=$((tms >= 930 && tms <= 1130))
pm_time=$((tms >= 1300 && tms <= 1500))

if ! ((am_time || pm_time)); then
    exit 0
fi

# 切换到程序目录
HOME=$(cd "$(dirname "$0")" || exit; pwd)
cd "$HOME" || exit;

# 日志文件
LOG_FILE="logs/$(date +%Y%m%d).log"

run_date=$(date +%Y%m%d)

################################################################
# 数据处理相关函数
################################################################

# 同步数据
sync_data() {
    echo "[$(date +'%Y%m%d %H:%M:%S')]: sync data" >> "$LOG_FILE"
    python3 main.py sync $run_date
}

# 统计分析
stat_data() {
    echo "[$(date +'%Y%m%d %H:%M:%S')]: stat data" >> "$LOG_FILE"
    python3 main.py stat $run_date
}

# 消息推送
push_data() {
    echo "[$(date +'%Y%m%d %H:%M:%S')]: push data" >> "$LOG_FILE"
    python3 main.py push $run_date
}

# 记录异常
logs_info() {
    echo "[$(date +'%Y%m%d %H:%M:%S')]: $1" >> "$LOG_FILE"
}

# 数据清理
clean_data() {
    # 仅在一天的指定时间执行清理
    if [[ "$tms" != "1400" ]]; then
        return
    fi

    echo "[$(date +'%Y%m%d %H:%M:%S')]: clean data" >> "$LOG_FILE"

    # 只对数据和日志进行清理
    array=("data" "logs")
    # 只清理30天前的数据
    target_date=$(date -d '-30 day' +%Y%m%d)

    for dir in "${array[@]}"; do
        if [ -d "$dir" ]; then
            find "$dir" -type f -name "*$target_date*" -exec rm -f {} \;
            echo "[$(date +'%Y%m%d %H:%M:%S')]: $dir 目录下带有 $target_date 的文件已删除。" >> "$LOG_FILE"
        fi
    done
}

################################################################
# 数据处理流程
################################################################

main() {
    echo -e "\n[$(date +'%Y%m%d %H:%M:%S')]: 任务开始" >> "$LOG_FILE"

    sync_data
    stat_data
    push_data
    clean_data

    echo -e "[$(date +'%Y%m%d %H:%M:%S')]: 任务结束\n" >> "$LOG_FILE"
}

trap 'logs_info "任务执行异常"; exit 1' INT TERM
exec > >(tee -a "$LOG_FILE") 2>&1

main "$@"
